package servlet;

import clases.Usuario;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class control extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //Cogemos la ruta para usar con el redirect
        String ruta = getServletContext().getContextPath();

        try {

            //Cogemos el parámetro opcion de la petición
            String opcion = request.getParameter("opcion");

            //Según el valor de opción haremos una cosa
            if (opcion == null) { // ########################################### <==== [null]

                //<editor-fold defaultstate="collapsed" desc="Si no hay opción vamos al Index">
                //Si no hay ninguna opcion vamos al panel.jsp o al index si no hay usuario logeado
                HttpSession session = request.getSession();
                Usuario usuario = (Usuario) session.getAttribute("usuario");
                if (usuario == null) {
                    response.sendRedirect(ruta + "/index.jsp");
                } else {
                    request.setAttribute("mensaje", "Operación cancelada");
                    request.getRequestDispatcher("/panel.jsp").forward(request, response);
                }
                //</editor-fold>

            } else if (opcion.equals("login")) { // ############################ <==== Login

                //<editor-fold defaultstate="collapsed" desc="Crear un nuevo usuario">
                //Cogemos el login y el password para ver si el usuario es correcto
                String login = request.getParameter("login");
                String password = request.getParameter("password");

                //Ya hemos puesto los datos y tenemos que crearlo
                Usuario usuario = Usuario.login(login, password);
                if (usuario == null) {
                    //No se pudo entrar, volvemos al index con mensaje de error
                    request.setAttribute("mensaje", "Error en Entrada");
                    request.getRequestDispatcher("/index.jsp").forward(request, response);
                } else {
                    //Si todo fue bien metemos al usuario en la sesion
                    HttpSession session = request.getSession();
                    session.setAttribute("usuario", usuario);
                    //Redireccionamos a dentro
                    request.getRequestDispatcher("/panel.jsp").forward(request, response);
                }
                //</editor-fold>

            } else if (opcion.equals("nuevo")) { // ############################ <==== Nuevo

                //<editor-fold defaultstate="collapsed" desc="Crear un nuevo usuario">
                //Depende de si tenemos un id o no sabremos si vamos a crear un nuevo usuario o ya lo hemos hecho
                if (request.getParameter("id") == null) {
                    //Como vamos a crear un usuario nuevo, eliminamos al usuario seleccionado
                    HttpSession session = request.getSession();
                    session.setAttribute("usuario", null);
                    //Vamos a crear un usuario nuevo: Redireccionamos a la página de datos
                    request.getRequestDispatcher("/datos.jsp").forward(request, response);
                } else {
                    //Ya hemos puesto los datos y tenemos que crearlo
                    Usuario nuevoUsuario = new Usuario();
                    nuevoUsuario.setNombre(request.getParameter("nombre"));
                    nuevoUsuario.setApellido(request.getParameter("apellido"));
                    nuevoUsuario.setPassword(request.getParameter("password"));
                    nuevoUsuario.setMail(request.getParameter("mail"));
                    nuevoUsuario.nuevo();
                    //Lo ideal es que una vez que hemos creado al usuario, se quede seleccionado
                    HttpSession session = request.getSession();
                    session.setAttribute("usuario", nuevoUsuario);
                    //Redireccionamos al panel de control con un mensaje de exito
                    request.setAttribute("mensaje", "Enhorabuena, su nueva cuenta ha sido creada!");
                    request.getRequestDispatcher("/panel.jsp").forward(request, response);
                }
                //</editor-fold>

            } else if (opcion.equals("editar")) { // ########################### <==== Editar

                //<editor-fold defaultstate="collapsed" desc="Editar un usuario que esté seleccionado">
                //Depende de si tenemos un id o no sabremos si vamos a editar o ya hemos editado
                if (request.getParameter("id") == null) {
                    //Vamos a editar al usuario seleccionado: Redireccionamos a la página de datos
                    request.getRequestDispatcher("/datos.jsp").forward(request, response);
                } else {
                    //Ya hemos editado al usuario y tenemos que guardar
                    HttpSession session = request.getSession();
                    Usuario usuario = (Usuario) session.getAttribute("usuario");
                    usuario.setNombre(request.getParameter("nombre"));
                    usuario.setApellido(request.getParameter("apellido"));
                    usuario.setPassword(request.getParameter("password"));
                    usuario.setMail(request.getParameter("mail"));
                    usuario.actualizar();
                    //Redireccionamos a confirmación para mostrar el mensaje
                    request.setAttribute("mensaje", "Se han editado los datos del usuario");
                    request.getRequestDispatcher("/confirmacion.jsp").forward(request, response);
                }
                //</editor-fold>

            } else if (opcion.equals("salir")) { // ############################ <==== Salir

                //<editor-fold defaultstate="collapsed" desc="Seleccionar un usuario">
                //Cerramos la sesión
                HttpSession session = request.getSession();
                session.invalidate();
                //Nos vamos al index para entrar otra vez si queremos
                request.setAttribute("mensaje", "Sesion Cerrada");
                request.getRequestDispatcher("/index.jsp").forward(request, response);
                //</editor-fold>

            } else if (opcion.equals("seleccionar")) {
                
                //<editor-fold defaultstate="collapsed" desc="Tareas relacionadas con seleccionar un jugador">
                request.getRequestDispatcher("/jugadores").forward(request, response);
                //</editor-fold>
                
            }
        } catch (Exception ex) {

            //<editor-fold defaultstate="collapsed" desc="Si hay un error, vamos a error.jsp">
            //Si se produce un error, lo mostramos en la página de error
            request.setAttribute("error", ex);
            //Redireccionamos a confirmación para mostrar el mensaje
            request.getRequestDispatcher("/error.jsp").forward(request, response);
            //</editor-fold>

        }


    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
